package service;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONObject;
import dao.UserDAO;
import domain.User;

/**
 * 账户Service接口.
 * <p>
 * 创建日期：2010-07-01<br>
 * 创建人：Xiyt<br>
 * 修改日期：<br>
 * 修改人：<br>
 * 修改内容：<br>
 * 
 * @author Xiyt
 * @version 1.0
 */
public interface UserService {

	/**
	 * 设定账户DAO
	 * */
	public void setUserDao(UserDAO userDao);
	/**
	 * 设定账户元数据DAO
	 * */
	public void setUserMetaService(UserMetaService userMetaService);
	/**
	 * 用户登录验证
	 * @param userId 账户ID
	 * @param password 账户密码
	 * @return JSONObject success 成功标示  message 错误消息 session 用户session信息
	 */
	@SuppressWarnings("unchecked")
	public Map login(String userId, String password) throws Exception;

	/**
	 * 根据条件查询用户数量
	 * @Description: 根据条件查询日记数量
	 * @param paramUser 用户
	 * @return int 用户数量
	 */
	public int countByCriteria(User paramUser);

	/**
	 * 根据ID查询用户
	 * @param userId 用户ID
	 * @return User 用户
	 */
	public User selectByPrimaryKey(String userId);

	/**
	 * 查询账户列表
	 * @param paramUser 用户
	 * @return list 用户列表
	 */
	public List<User> selectByCriteria(User paramUser);

	/**
	 * 查询账户列表带分页
	 * @param paramUser 用户
	 * @return list 用户列表
	 */
	public List<User> selectByCriteriaForPaging(User paramUser);

	/**
	 * 添加用户
	 * @param user 用户
	 */
	public void insert(User user);

	/**
	 * 修改账户信息
	 * @param user 用户
	 */
	public void update(User user);

	/**
	 * 修改账户信息（包括配置信息）
	 * @param map 用户参数
	 */
	@SuppressWarnings("unchecked")
	public JSONObject update(Map map) throws Exception;

	/**
	 * 修改账户基本信息
	 * @param userIds 用户IDS
	 * @param map 用户参数
	 */
	@SuppressWarnings("unchecked")
	public void update(String userIds, Map map) throws IllegalAccessException, InvocationTargetException;

	/**
	 * 删除账户信息
	 * @param userIds 用户IDS
	 * @param filePath 用户文件保存路径
	 */
	public void delete(String userIds, String filePath) throws Exception;
	
	/**
	 * 注册用户
	 * @param map 参数
	 */
	@SuppressWarnings("unchecked")
	public JSONObject register(Map map) throws Exception;
	
	/**
	 * 重置密码
	 * @param map 参数
	 */
	@SuppressWarnings("unchecked")
	public JSONObject resetPwd(Map map) throws Exception;
}
